const arr=[1,[2,[3,4]]]
function flatten(arr){
    let newArr=[]
    for(let i=0;i<arr.length;i++){
        if(Array.isArray(arr[i])){
            newArr=newArr.concat(flatten(arr[i]))
        }else{
            newArr.push(arr[i])
        }
    }
    return newArr
}
console.log(flatten(arr));

//只适用于全是数字的情况
function flatten(arr){
    return arr.toString().split(',').map(item=>{
        return +item
    })
}
//reduce加递归
function flatten(arr){
    return arr.reduce((pre,cur)=>{
        return pre.concat(Array.isArray(cur)?flatten(cur):cur)
    },[])
}
//解构循环
function flatten(arr){
    while(arr.some((item)=>Array.isArray(item))){
        arr=[].concat(...arr)//这样会有扁平一层的效果
        //concat 方法在合并时，若遇到子数组，会将其内部元素「拉平」后再合并（而不是保留子数组本身）。
        // arr=[...arr]//这样没有扁平的效果
    }
    return arr
}
console.log(flatten(arr));
console.log([].concat(...arr));
